<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // * 常见的生成Undefined的环境：
    //      变量被声明了，但没有赋值时，就等于undefined
    // {
    //     let a;
    //     var b;
    //     console.log(a,b);// undefined undefined
    // }
    //
    //      调用函数时，应该提供的参数没有提供，该参数等于undefined
    // {
    //     function fn(userName,age){
    //         console.log(userName,age);// "zhangsan" undefined
    //     }
    //     fn("zhangsan")
    // }
    //
    //   对象没有赋值的属性，该属性的值为undefined
    // {
    //     const obj = {
    //         a:1
    //     }
    //     console.log(obj.a);// 1
    //     console.log(obj.b);// undefined
    //     // console.log(obj.c());// obj.c is not a function
    //     console.log(obj.d.m);// Cannot read properties of undefined (reading 'm')
    // }

    //      函数没有返回值时或return右侧没有内容时，默认返回undefined
    {
        // function fn(){
        //
        // }
        // function fn2(){
        //     return;
        // }
        // function fn3(){
        //     setTimeout(()=>{
        //         return "fn3"
        //     },1000);
        // }
        //
        // console.log(fn());// undefined
        // console.log(fn2());// undefined
        // console.log(fn3());// undefined
    }
    // * Undefined常被用于条件判断
    //      判断函数是否传递参数
    // {
    //     // function fn(age){
    //     //     if(age){
    //     //         console.log("有值",age)
    //     //     }else{
    //     //         console.log("无值")
    //     //     }
    //     // }
    //     // fn();// 无值
    //     // fn(false);// 无值
    //     // fn(0);// 无值
    //     // fn("");// 无值
    //
    //     // 判断是否传递了参数，建议使用typeof
    //     function fn(age){
    //         if(typeof age !== "undefined"){
    //             console.log("有值",age)
    //         }else{
    //             console.log("无值")
    //         }
    //     }
    //     fn();// 无值
    //     fn(false);// 无值
    //     fn(0);// 无值
    //     fn("");// 无值
    // }
    //      判断对象是否拥有指定的属性
    {
        const obj = {
            a:1,
            b:2
        }
        // 严谨
        // if(typeof obj.c === "undefined"){
        //    无值
        // }else{
        //    有值
        // }

        // 如果确定c的属性值不可能是false,空字符串，0：
        // if(obj.c){
        //
        // }
    }
</script>
</html>